﻿// 101 最大公约数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
http://oj.daimayuan.top/course/21/problem/486


输入T，一共T组数据，每组两个数a,b，输出它们的最大公约数和最小公倍数。

输入格式
第一行一个数字T。

接下来T行，每行两个数字a,b。

输出格式
一共T行，每行两个数，分别表示最大公约数和最小公倍数。

输入样例
2
1 2
100 150
输出样例
1 2
50 300
数据规模
对于100%
的数据，保证1≤T≤104,1≤a,b≤109。
*/


#include <iostream>

using namespace std;


int T;
int a, b;

int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}

void solve() {
    cin >> a >> b;
    int t = gcd(a, b);
    long long tt = 1LL*a / t * b;
    cout << t << " " << tt << endl;
}

int main()
{
    cin >> T;
    while (T--) {
        solve();
    }


    return 0;
}

 